2 async commit
1 waitwatch
1 ackwatch token' | ./xs_test 2>&1`" = "1:/test/dir/sub:token" ]
+
+# Multiple events from single transaction don't trigger assert
+[ "`echo -e '1 watch /test token
+2 start /test
+2 write /test/1 create contents
+2 write /test/2 create contents
+2 async commit
+1 waitwatch
+1 ackwatch token
+1 waitwatch
+1 ackwatch token' | ./xs_test 2>&1`" = "1:/test/1:token
+1:/test/2:token" ]
str = talloc_vasprintf(NULL, fmt, arglist);
va_end(arglist);
+ trace("xenstored corruption: connection id %i: err %s: %s",
+ conn ? (int)conn->id : -1, strerror(saved_errno), str);
eprintf("xenstored corruption: connection id %i: err %s: %s",
conn ? (int)conn->id : -1, strerror(saved_errno), str);
#ifdef TESTING
write(tracefd, ")\n", 2);
}
+void trace(const char *fmt, ...)
+{
+ va_list arglist;
+ char *str;
+
+ if (tracefd < 0)
+ return;
+
+ va_start(arglist, fmt);
+ str = talloc_vasprintf(NULL, fmt, arglist);
+ va_end(arglist);
+ write(tracefd, str, strlen(str));
+ talloc_free(str);
+}
+
static bool write_message(struct connection *conn)
{
int ret;
void trace_create(const void *data, const char *type);
void trace_destroy(const void *data, const char *type);
void trace_watch_timeout(const struct connection *conn, const char *node, const char *token);
+void trace(const char *fmt, ...);
#endif /* _XENSTORED_CORE_H */
if (conn->transaction)
return false;
- assert(conn->state == OK);
-
/* Create an event for each watch. Don't send to self. */
list_for_each_entry(i, &connections, list) {
if (i == conn)